// pages/profile/profile.js
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null,
    hasUserInfo: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查是否已经登录
    this.checkLoginStatus()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 检查登录状态
  async checkLoginStatus() {
    try {
      const userInfo = wx.getStorageSync('userInfo')
      if (userInfo) {
        this.setData({
          userInfo,
          hasUserInfo: true
        })
      }
    } catch (err) {
      console.error('检查登录状态失败', err)
    }
  },

  // 获取用户信息
  async getUserProfile() {
    try {
      // 获取用户信息
      const { userInfo } = await wx.getUserProfile({
        desc: '用于完善用户资料'
      })

      // 调用云函数登录
      const { result } = await wx.cloud.callFunction({
        name: 'login'
      })

      // 合并用户信息
      const userData = {
        ...userInfo,
        openid: result.openid,
        createTime: new Date()
      }

      // 保存到云数据库
      await this.saveUserInfo(userData)

      // 保存到本地存储
      wx.setStorageSync('userInfo', userData)

      // 更新页面数据
      this.setData({
        userInfo: userData,
        hasUserInfo: true
      })

      wx.showToast({
        title: '登录成功',
        icon: 'success'
      })

    } catch (err) {
      console.error('登录失败', err)
      wx.showToast({
        title: '登录失败',
        icon: 'error'
      })
    }
  },

  // 保存用户信息到云数据库
  async saveUserInfo(userData) {
    try {
      const db = wx.cloud.database()
      // 查询用户是否已存在
      const { data } = await db.collection('users')
        .where({
          openid: userData.openid
        })
        .get()

      if (data.length === 0) {
        // 新用户，插入数据
        await db.collection('users').add({
          data: userData
        })
      } else {
        // 老用户，更新数据
        await db.collection('users').where({
          openid: userData.openid
        }).update({
          data: {
            ...userData,
            updateTime: new Date()
          }
        })
      }
    } catch (err) {
      console.error('保存用户信息失败', err)
      throw err
    }
  }
})